﻿#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <list>
#include <algorithm>
#include <iterator>

#define main test_main_bubble_sort

#define NUM 200

using namespace std;

void swap(int* pa, int* pb)
{
	int temp;
	temp=*pa;
	*pa=*pb;
	*pb=temp;
}

int main(int argc, char* argv[])
{
	cout<<"start the demo of bubble sort alogrithm"<<endl;
	int * int_array=new int[NUM];
	for(int i=0; i<NUM;i++)
		int_array[i]=NUM-i;
	for(int i=0; i<NUM;i++)
		cout<<int_array[i]<<'\t';
	cout<<endl;

	//for(int i=0;i<0;i++)
	//	cout<<"test only"<<endl;
	///@alex:注意对于for循环的使用，先对i赋值，然后判断中间的条件是否成立，成立了就执行下一行的语句，再对i做++操作，然后再判断中间的条件。如果条件不满足，就直接退出循环，即可
	
	for(int i=NUM-1;i>0;i--)///@alex:这边容易犯的错误是，将i>0写成i<0，是思维考虑不全的问题
	{
		for(int j=0;j<i;j++)
		{
			if(int_array[j] > int_array[j+1])///@alex:这边容易出的问题是会写成*j>*(j+1)，这个明显也是想歪了的情况
				swap(&int_array[j] , &int_array[j+1]);///@alex:这边也容易出错，因为很容易就写成了:swap(int_array[j] , int_array[j+1]); ，这样就会出现很明显的bug了，即传参引用，而不是传参引用，在写函数的时候一定要十分小心这种情况的出现
		}
	}///@alex:这边的这个花括号是可以省略的，因为for的特殊结构。但是留着也没有什么问题	
	for(int i=0; i<NUM;i++)
		cout<<int_array[i]<<'\t';
	cout<<endl;

	return 0;
}

